package metier;

import static org.junit.Assert.*;

import org.junit.Test;

public class TestContrat {

	
	
	/**
	 * Méthode de test du constructeur et des accesseurs en lecture de la classe Contrat
	 * On créé un contrat et on vérifie que les accesseurs permettent de récupérer la valeur 
	 * de chaque attribut
	 */
	public void testGet() {
		Contrat monContrat = new Contrat(6, "Coucou Hibou", "Salut c'est cool");
		assertEquals(monContrat.getReference(), 6);
		assertEquals(monContrat.getObjetContrat(), "Coucou Hibou");
		assertEquals(monContrat.getNomClient(), "Salut c'est cool");
	}

	/**
	 * Méthode de test de setObjectContrat de la classe Contrat
	 * On vérifie que le libellé est bien modifié
	 */
	@Test
	public void testSetObjetContrat() {
		Contrat monContrat = new Contrat(6, "Coucou Hibou", "Salut c'est cool");
		monContrat.setObjetContrat("Chef oui chef!");
		assertEquals(monContrat.getObjetContrat(), "Chef oui chef!");

	}
	/**
	 * Méthode de test de setNomClient de la classe Contrat
	 * On vérifie que le libellé est bien modifié
	 */
	@Test
	public void testsetNomClient() {
		Contrat monContrat = new Contrat(6, "Coucou Hibou", "Salut c'est cool");
		monContrat.setNomClient("Oui mon seigneur");
		assertEquals(monContrat.getNomClient(), "Oui mon seigneur");
	}

	/**
	 * Méthode de test des accesseurs en écriture de la classe Contrat
	 * On vérifie qu'un contrat avec les memes attributs est bien "égal" a un autre,
	 * et on vérifie que le changement d'un seul paramètre rend cette égalité fausse
	 */
	@Test
	public void testEquals() {
		
		Contrat unContrat = new Contrat(1, "Toc toc toc", "Qui est la?");
		Contrat unAutreContrat = new Contrat(1, "Toc toc toc", "Qui est la?");
		assertTrue(unContrat.equals(unAutreContrat));
		unAutreContrat = new Contrat(5, "Toc toc toc", "Qui est la?");
		assertFalse(unContrat.equals(unAutreContrat));
		unAutreContrat = new Contrat(1, "Allez oust", "Qui est la?");
		assertFalse(unContrat.equals(unAutreContrat));
		unAutreContrat = new Contrat(1, "Toc toc toc", "Ca marche bien");
		assertFalse(unContrat.equals(unAutreContrat));
		unAutreContrat = new Contrat(5, "Allez oust", "Ca marche bien");
		assertFalse(unContrat.equals(unAutreContrat));

	}
	
	/**
	 * Méthode de test de la représentation en chaine des instances de la classe Contrat
	 * On vérifie que la chaine produite donne bien toutes les informations sur le contrat
	 */
	@Test
	public void testToString() {
		Contrat monContrat = new Contrat(6, "Couillère", "Salut c'est cool");
		monContrat.toString();
		assertEquals(monContrat.toString(), "6 Couillère Salut c'est cool");
	}

	/**
	 * Méthode de test de la représentation en chaine des instances de la classe Contrat
	 * On vérifie que la chaine produite donne bien toutes les informations sur le contrat,
	 * avec le descriptif
	 */
	@Test
	public void testToStringDescriptif() {
		Contrat monContrat = new Contrat(6, "La Vache Qui Rit",
				"Kiri Kiri Kiri");
		monContrat.toStringDescriptif();
		assertEquals(monContrat.toStringDescriptif(), "reference : 6\n" +
				"objet du contrat : La Vache Qui Rit\nnom du client : Kiri Kiri Kiri");
	}

}
